#!/bin/bash
set -e  # 遇到错误立即退出

# 检查是否以root权限运行
if [ "$EUID" -ne 0 ]; then 
    echo "请使用root权限运行此脚本: sudo $0"
    exit 1
fi

# 检查是否为Debian/Ubuntu系统
if ! grep -qE "Debian|Ubuntu" /etc/os-release;
then
    echo "错误：此脚本仅适用于Debian或Ubuntu系统"
    exit 1
fi

# 检查是否为Debian系统以获取版本
if grep -q "Debian" /etc/os-release;
then
    DEBIAN_VERSION=$(grep -oP 'VERSION_ID="\K[^"]+' /etc/os-release)
    if [ "$DEBIAN_VERSION" != "12" ];
    then
        echo "警告：此脚本推荐在Debian 12上使用，当前系统版本为Debian $DEBIAN_VERSION"
        echo "继续安装可能导致兼容性问题"
    fi
fi

# 设置颜色输出
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'

echo -e "${GREEN}开始安装2RTK NTRIP Caster服务...${NC}"

# 1. 更新系统并安装必要依赖（包含sqlite3系统库）
echo -e "${GREEN}1. 更新系统并安装基础依赖...${NC}"
apt update -y
apt upgrade -y
apt install -y python3 python3-pip python3-venv python3-full git ufw sqlite3 libsqlite3-dev

# 2. 创建服务用户和目录
echo -e "${GREEN}2. 创建服务用户和目录...${NC}"
# 创建用户（如果不存在）
if ! id "2rtk" &>/dev/null; then
    useradd -r -s /bin/false 2rtk
fi

# 创建必要的目录
mkdir -p /opt/2rtk
mkdir -p /var/log/2rtk

# 复制项目文件到目标目录
cp -r ./* /opt/2rtk/

# 修正requirements.txt（移除sqlite3条目）
echo -e "${GREEN}修复依赖文件...${NC}"
sed -i '/sqlite3/d' /opt/2rtk/requirements.txt

# 设置权限
chown -R 2rtk:2rtk /opt/2rtk
chown -R 2rtk:2rtk /var/log/2rtk
chmod 755 /opt/2rtk
chmod 755 /var/log/2rtk

# 3. 配置Python虚拟环境并安装依赖
echo -e "${GREEN}3. 配置Python虚拟环境并安装依赖...${NC}"
# 创建虚拟环境
python3 -m venv /opt/2rtk/venv

# 在虚拟环境中安装依赖（解决PEP 668限制）
/opt/2rtk/venv/bin/pip install --upgrade pip
/opt/2rtk/venv/bin/pip install -r /opt/2rtk/requirements.txt

# 4. 配置systemd服务（自动创建缺失的服务文件）
echo -e "${GREEN}4. 配置systemd服务...${NC}"
# 检查并创建服务文件
if [ ! -f "/opt/2rtk/2rtk.service" ]; then
    echo "创建2rtk.service服务文件..."
    cat > /etc/systemd/system/2rtk.service << EOF
[Unit]
Description=2RTK NTRIP Caster Service
After=network.target

[Service]
User=2rtk
Group=2rtk
WorkingDirectory=/opt/2rtk
ExecStart=/opt/2rtk/venv/bin/python3 /opt/2rtk/2rtk.py
Restart=always
RestartSec=5
Environment="PATH=/opt/2rtk/venv/bin"

[Install]
WantedBy=multi-user.target
EOF
else
    # 如果服务文件存在，更新执行路径为虚拟环境
    echo "更新现有服务文件中的Python路径..."
    sed -i 's|ExecStart=.*|ExecStart=/opt/2rtk/venv/bin/python3 /opt/2rtk/2rtk.py|' /opt/2rtk/2rtk.service
    cp /opt/2rtk/2rtk.service /etc/systemd/system/
fi

# 重新加载systemd配置
systemctl daemon-reload
systemctl enable 2rtk

# 5. 配置日志轮转
echo -e "${GREEN}5. 配置日志轮转...${NC}"
cat > /etc/logrotate.d/2rtk << EOF
/var/log/2rtk/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 644 2rtk 2rtk
}
EOF

# 6. 配置防火墙
echo -e "${GREEN}6. 配置防火墙...${NC}"
if command -v ufw >/dev/null; then
    ufw allow 2101/tcp   # NTRIP端口
    ufw allow 5757/tcp   # Web管理端口
    ufw --force enable   # 启用防火墙（--force避免交互提示）
    echo "防火墙规则已添加并启用"
else
    echo "未检测到ufw，请手动配置防火墙规则"
fi

# 7. 启动服务
echo -e "${GREEN}7. 启动服务...${NC}"
systemctl start 2rtk

# 检查服务状态
if systemctl is-active --quiet 2rtk; then
    echo -e "${GREEN}2RTK服务安装成功并已启动！${NC}"
    echo "服务状态: 运行中"
    echo "您可以使用以下命令管理服务："
    echo "  启动服务: sudo systemctl start 2rtk"
    echo "  停止服务: sudo systemctl stop 2rtk"
    echo "  重启服务: sudo systemctl restart 2rtk"
    echo "  查看状态: sudo systemctl status 2rtk"
    echo "  启用自启: sudo systemctl enable 2rtk"
    echo "  禁用自启: sudo systemctl disable 2rtk"
    echo -e "${GREEN}安装完成！NTRIP服务端口: 2101, Web管理端口: 5757${NC}"
else
    echo -e "${RED}服务启动失败，请检查日志文件：/var/log/2rtk/2rtk.log${NC}"
    exit 1
fi
    